#include "my_inc/main_login.h"
#include "my_inc/tic.h"

static lv_obj_t * label;

// 返回标签
lv_obj_t * re_label()
{
    return label;
}

// 写入事件
void tic_cell(lv_event_t * e)
{
    // 恢复计时器
    if(game_timer != NULL) {
        lv_timer_resume(game_timer);
        printf("计时器已恢复\n");
    } else {
        printf("错误：计时器不存在\n");
    }
    lv_obj_t * labell = lv_event_get_user_data(e);
    label             = labell;
}

// home按钮事件
void home_tic(lv_event_t * e)
{
    // 获取事件传递的用户数据（menu_p结构体指针）
    main_tic_p tic_p = lv_event_get_user_data(e);
    // 安全检查：确保m_p和链表头指针有效
    if(!tic_p || !tic_p->head) return;

    // 获取触发事件的按钮对象
    lv_obj_t * btn = lv_event_get_target(e);
    // 获取按钮的第一个子对象（通常是标签）
    lv_obj_t * label = lv_obj_get_child(btn, 0);
    // 获取按钮文本内容，用于判断是哪个按钮触发的事件
    const char * btn_text = lv_label_get_text(label);

    // 在链表中查找名为"主界面"的页面节点
    face_p main_face = find(tic_p->head, "主界面");
    // 安全检查：确保找到主界面且屏幕对象有效
    if(!main_face || !main_face->screen) return;

    // 获取主界面的屏幕对象
    lv_obj_t * scr = main_face->screen;

    // 判断是否是返回按钮（左箭头符号）触发的事件
    if(!strcmp(btn_text, LV_SYMBOL_LEFT)) {
        // 如果是返回按钮，执行游戏资源清理操作
        // 棋盘初始化
        init_tic();
        Chessboard(tic_p->cont_tic, sign);
        lv_obj_add_flag(tic_p->game_over_label, LV_OBJ_FLAG_HIDDEN); // 隐藏OBJ
        // 1. 停止并删除游戏定时器 - 防止定时器回调继续执行
        if(game_timer) {
            lv_timer_del(game_timer); // 删除LVGL定时器
            game_timer = NULL;        // 将指针置空，避免悬空指针
        }
        // 创建游戏更新定时器（每100ms检查一次）
        game_timer = lv_timer_create(main_tic, 500, tic_p);
        lv_timer_set_repeat_count(game_timer, -1); // 无限重复
        lv_timer_pause(game_timer);                // 在这里暂停计时器
        lv_obj_add_flag(tic_p->obj, LV_OBJ_FLAG_HIDDEN); // 隐藏OBJ
    }
    // 注意：其他按钮（如HOME按钮）直接返回主界面，不清理游戏资源

    // 加载主界面屏幕
    lv_scr_load(scr);
}

// 菜单按钮事件
void menu_tic(lv_event_t * e)
{
    main_tic_p tic_p = lv_event_get_user_data(e);
    if(!tic_p->obj_j) {
        lv_obj_clear_flag(tic_p->obj, LV_OBJ_FLAG_HIDDEN); // 显示OBJ
        tic_p->obj_j = 1;
    } else {
        lv_obj_add_flag(tic_p->obj, LV_OBJ_FLAG_HIDDEN); // 隐藏OBJ
        tic_p->obj_j = 0;
    }
}

// 重置按钮事件
void reset_tic(lv_event_t * e)
{
    main_tic_p tic_p = lv_event_get_user_data(e);
    lv_obj_add_flag(tic_p->game_over_label, LV_OBJ_FLAG_HIDDEN); // 隐藏OBJ
    // 棋盘初始化
    init_tic();
    Chessboard(tic_p->cont_tic, sign);
    if(game_timer) {
        lv_timer_del(game_timer); // 删除LVGL定时器
        game_timer = NULL;        // 将指针置空，避免悬空指针
    }
    // 创建游戏更新定时器（每100ms检查一次）
    game_timer = lv_timer_create(main_tic, 500, tic_p);
    lv_timer_set_repeat_count(game_timer, -1); // 无限重复
    lv_timer_pause(game_timer);                // 在这里暂停计时器
}